Appearance
HJ102 字符统计
本节目标:理解“HJ102 字符统计”的核心思路,并能把它用于实际开发或面试表达。
说明:原 OneNote 中有图片引用,但图片未包含在导出目录中;本页保留了可用的文字与代码内容。 描述 输入一个只包含小写英文字母和数字的字符串,按照不同字符统计个数由多到少输出统计结果,如果统计的个数相同,则按照ASCII码由小到大排序输出。 数据范围:
输入描述: 一个只包含小写英文字母和数字的字符串。 输出描述: 一个字符串,为不同字母出现次数的降序表示。若出现次数相同,则按ASCII码的升序输出。 示例1 输入: aaddccdc ==复制== 输出: cda ==复制== 说明: 样例里,c和d出现3次,a出现2次,但c的ASCII码比d小,所以先输出c,再输出d,最后输出a.
要解决这个问题,我们可以先统计字符串中每个字符出现的次数,然后根据字符出现的次数和ASCII码进行排序。
具体步骤如下:
- 使用字典统计每个字符出现的次数。
- 将统计结果转换为一个列表,其中每个元素是一个包含字符和其出现次数的元组。
- 对这个列表进行排序,先按出现次数降序排序,如果出现次数相同,则按字符的ASCII码升序排序。
- 根据排序后的列表构建最终的字符串。
输入字符串
s = input()
使用字典统计每个字符出现的次数
char_count = {} for char in s: if char in char_count: char_count[char] += 1 else: char_count[char] = 1
将统计结果转换为列表,每个元素是(字符, 出现次数)的元组
count_list = list(char_count.items())
对列表进行排序,先按出现次数降序,再按ASCII码升序
count_list.sort(key=lambda x: (-x[1], x[0]))
构建最终的字符串
result = ''.join([item[0] for item in count_list])
输出结果
print(result)
这段代码首先通过遍历输入的字符串input()来统计每个字符出现的次数,并将结果存储在char_count字典中。然后,它将字典转换为包含(字符, 出现次数)元组的列表,并对这个列表进行排序。排序时,首先按出现次数降序(使用-x[1]实现),如果出现次数相同,则按字符的ASCII码升序(直接使用x[0])。最后,使用列表推导和join方法构建出最终的字符串,并输出。
input_str = input().strip() count_map = {} for s in input_str: if s in count_map: count_map[s] += 1 else: count_map[s] = 1 new_list = sorted(count_map.items(), key=lambda x: (-x[1], x[0])) print(''.join([i[0] for i in new_list]))
